// pages/pay/pay.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    totalAmount: '0.00',
    selectedMethod: 'wechat', // 默认选择微信支付
    orderInfo: null,
    storeInfo: {
      name: '',
      address: '广东省东莞市石排镇石排大道88号'
    },
    pickupTime: '立即取餐',
    showTimePicker: false,
    dateList: [],
    timeList: [],
    selectedDateIndex: 0,
    selectedTimeText: '',
    diningType: '', // 用餐方式：dineIn 或 takeOut
    businessHours: {
      start: 9, // 营业开始时间
      end: 22   // 营业结束时间
    },
    // 备注相关数据
    showNotePopup: false,
    noteText: '',
    noteLength: 0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    console.log('接收到的参数:', options);
    
    // 设置金额
    if (options.amount) {
      this.setData({
        totalAmount: options.amount
      });
    }

    // 设置店铺信息
    if (options.storeName) {
      this.setData({
        'storeInfo.name': options.storeName
      });
    }

    // 设置用餐方式
    if (options.diningType) {
      this.setData({
        diningType: options.diningType
      });
    }

    // 初始化日期列表
    this.initDateList();

    // 根据用餐方式设置默认时间
    if (this.data.diningType === 'takeOut') {
      // 外卖默认需要选择时间
      this.showTimePicker();
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  /**
   * 选择支付方式
   */
  selectPayMethod: function(e) {
    const method = e.currentTarget.dataset.method;
    this.setData({
      selectedMethod: method
    });
  },

  /**
   * 确认支付
   */
  confirmPay: function() {
    if (!this.checkOrderInfo()) {
      return;
    }

    const that = this;
    wx.showLoading({
      title: '支付处理中...',
    });

    // 模拟支付过程
    setTimeout(function() {
      wx.hideLoading();
      wx.showToast({
        title: '支付成功',
        icon: 'success',
        duration: 2000,
        success: function() {
          // 支付成功后跳转到订单列表
          setTimeout(function() {
            wx.redirectTo({
              url: '/pages/order/order'
            });
          }, 2000);
        }
      });
    }, 1500);
  },

  /**
   * 选择预约时间
   */
  goToChoiseTime: function() {
    // 这里可以实现时间选择的逻辑
    wx.showToast({
      title: '时间选择功能开发中',
      icon: 'none',
      duration: 2000
    });
  },

  // 初始化日期列表
  initDateList() {
    const dateList = [];
    const now = new Date();
    
    // 生成未来7天的日期列表
    for (let i = 0; i < 7; i++) {
      const date = new Date(now.getTime() + i * 24 * 60 * 60 * 1000);
      dateList.push({
        date: `${date.getMonth() + 1}月${date.getDate()}日`,
        week: i === 0 ? '今天' : this.getWeekDay(date.getDay()),
        fullDate: date
      });
    }

    this.setData({ dateList }, () => {
      this.updateTimeList(0); // 默认选中第一天
    });
  },

  // 获取星期几
  getWeekDay(day) {
    const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
    return weekDays[day];
  },

  // 更新时间列表
  updateTimeList(dateIndex) {
    const selectedDate = this.data.dateList[dateIndex].fullDate;
    const now = new Date();
    const { start, end } = this.data.businessHours;
    const timeList = [];
    
    // 获取当前时间
    const currentHour = now.getHours();
    const currentMinute = now.getMinutes();
    
    // 判断是否是今天
    const isToday = dateIndex === 0;
    
    // 如果是今天，添加立即取餐选项
    if (isToday && currentHour >= start && currentHour < end) {
      timeList.push({
        time: '立即取餐',
        active: false,
        disabled: false,
        isImmediate: true
      });
    }

    // 生成时间列表
    for (let hour = start; hour < end; hour++) {
      for (let minute = 0; minute < 60; minute += 30) {
        // 创建时间对象用于比较
        const timeDate = new Date(selectedDate);
        timeDate.setHours(hour, minute);
        
        // 如果是今天，只显示当前时间之后的时间段
        if (isToday && (hour < currentHour || (hour === currentHour && minute <= currentMinute))) {
          continue;
        }

        const timeStr = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;
        timeList.push({
          time: timeStr,
          active: false,
          disabled: false,
          isImmediate: false
        });
      }
    }

    this.setData({ timeList }, () => {
      if (timeList.length > 0) {
        // 获取时间列表组件
        const query = wx.createSelectorQuery();
        query.select('.time-list').boundingClientRect();
        query.exec((res) => {
          if (res[0]) {
            // 计算需要滚动的位置
            const itemHeight = 80; // 每个时间项的高度
            const scrollTop = isToday ? itemHeight : 0; // 如果是今天，滚动到第二个选项（跳过立即取餐）
            
            // 设置滚动位置
            wx.nextTick(() => {
              this.setData({
                scrollTop: scrollTop
              });
            });
          }
        });
      }
    });
  },

  // 显示时间选择器
  showTimePicker() {
    this.setData({
      showTimePicker: true
    });
  },

  // 隐藏时间选择器
  hideTimePicker() {
    this.setData({
      showTimePicker: false
    });
  },

  // 防止点击穿透
  preventBubble() {
    return;
  },

  // 选择日期
  selectDate(e) {
    const index = e.currentTarget.dataset.index;
    this.setData({
      selectedDateIndex: index
    });
    this.updateTimeList(index);
  },

  // 选择时间
  selectTime(e) {
    const { index, time } = e.currentTarget.dataset;
    const { dateList, selectedDateIndex } = this.data;
    
    // 更新选中状态
    const timeList = this.data.timeList.map((item, i) => ({
      ...item,
      active: i === index
    }));

    // 更新显示文本
    let selectedTimeText;
    if (this.data.timeList[index].isImmediate) {
      selectedTimeText = '立即取餐';
    } else {
      selectedTimeText = `${dateList[selectedDateIndex].week} ${time}`;
    }
    
    this.setData({
      timeList,
      selectedTimeText
    });

    // 延迟关闭弹窗
    setTimeout(() => {
      this.hideTimePicker();
      wx.showToast({
        title: '已选择取餐时间',
        icon: 'success',
        duration: 1500
      });
    }, 300);
  },

  // 选择立即取餐
  selectImmediatePickup() {
    const now = new Date();
    const currentHour = now.getHours();
    const { start, end } = this.data.businessHours;

    // 检查是否在营业时间内
    if (currentHour < start || currentHour >= end) {
      wx.showToast({
        title: '当前不在营业时间内',
        icon: 'none',
        duration: 2000
      });
      return;
    }

    this.setData({
      pickupTime: '立即取餐',
      selectedTimeText: '',
      timeList: this.data.timeList.map(item => ({
        ...item,
        active: false
      }))
    });

    this.hideTimePicker();
    wx.showToast({
      title: '已选择立即取餐',
      icon: 'success',
      duration: 1500
    });
  },

  // 检查订单信息完整性
  checkOrderInfo() {
    if (this.data.diningType === 'takeOut' && !this.data.selectedTimeText) {
      wx.showToast({
        title: '请选择取餐时间',
        icon: 'none',
        duration: 2000
      });
      return false;
    }
    return true;
  },

  // 显示备注弹窗
  showNotePopup() {
    this.setData({
      showNotePopup: true
    });
  },

  // 隐藏备注弹窗
  hideNotePopup() {
    this.setData({
      showNotePopup: false
    });
  },

  // 监听备注输入
  onNoteInput(e) {
    const value = e.detail.value;
    this.setData({
      noteText: value,
      noteLength: value.length
    });
  },

  // 确认备注
  confirmNote() {
    this.hideNotePopup();
    if (this.data.noteText.trim()) {
      wx.showToast({
        title: '备注已保存',
        icon: 'success',
        duration: 1500
      });
    }
  }
})